const Koa = require('koa');
const router = require('koa-router')();
// 实例化koa
const app = new Koa();

const fs = require('fs');
// var bodyParser = require('koa-bodyparser');
// app.use(bodyParser());

const koaBody = require('koa-body');
// 文件上传
app.use(koaBody({
    multipart: true, // 开启文件上传
    formidable: {
        maxFileSize: 2 * 1024 * 1024,    // 设置上传文件大小最大限制，默认2M
        keepExtensions: true // 保留文件拓展名
    }
}))
// logger
// const logsUtil = require('./common/logs.js');
// app.use(async (ctx, next) => {
//     const start = new Date();					          // 响应开始时间
//     let intervals;								              // 响应间隔时间
//     try {
//         await next();
//         intervals = new Date() - start;
//         logsUtil.logResponse(ctx, intervals);	  //记录响应日志
//     } catch (error) {
//         intervals = new Date() - start;
//         logsUtil.logError(ctx, error, intervals);//记录异常日志
//     }
// })


// 根据数据库自动生成model
// require('./common/automate')     

// // 路由模块化
let urls = fs.readdirSync(__dirname + '/routes')   
urls.forEach((element) => { 
    //routes里的js接口文件
    let module = require(__dirname + '/routes/' + element)
    //routes里的文件名作为 路由名
    router.use('/api/' + element.replace('.js', ''), module)
})

// 校验token
const checkToken = require('./middleware/checkToken.js')
// 验证token的中间件函数
app.use(checkToken)

// 表单校验
const bouncer = require('koa-bouncer');
app.use(bouncer.middleware());


//统一错误异常处理
const errorHandler = require('./middleware/error');
errorHandler(app);

// 配置路由 注册路由
app.use(router.routes()).use(router.allowedMethods());

// 设置端口号
const port = 3008;
// 监听端口号
app.listen(port, () => {
    console.log(`server started on ${port}`);
})